﻿using System;
using HK.Core.Common.Data;
using HK.Core.Utils;
using HK.Editor.GUIEx.Data;
using HK.Editor.GUIEx.Protocol.Window;
using HK.Editor.GUIEx.Window;
using HK.Editor.Load.Data;
using HK.Editor.Load.Protocol.Data;

namespace HK.Editor.Load.Protocol.Window
{
    
    /// <summary>
    /// 列定义 - 加载监视树
    /// </summary>
    internal enum LoadTreeColumns
    {
        /// <summary>
        /// No
        /// </summary>
        No,
        /// <summary>
        /// Asset
        /// </summary>
        Asset,
        /// <summary>
        /// AssetType
        /// </summary>
        AssetType,
        /// <summary>
        /// 文件后缀
        /// </summary>
        Extension,
        /// <summary>
        /// From
        /// </summary>
        From,
        /// <summary>
        /// 加载方式
        /// </summary>
        Async,
        /// <summary>
        /// 引用计数
        /// </summary>
        ReferenceCount,
        /// <summary>
        /// 物理大小
        /// </summary>
        Size,
        /// <summary>
        /// 运存大小
        /// </summary>
        MemorySize,
        /// <summary>
        /// 耗时
        /// </summary>
        CostTime,
        /// <summary>
        /// 加载时间
        /// </summary>
        LoadTime
    }
    
    /// <summary>
    /// 排序选项 - 加载监视树
    /// </summary>
    internal enum LoadTreeSortOptions
    {
        /// <summary>
        /// No
        /// </summary>
        No,
        /// <summary>
        /// Asset
        /// </summary>
        Asset,
        /// <summary>
        /// AssetType
        /// </summary>
        AssetType,
        /// <summary>
        /// 文件后缀
        /// </summary>
        Extension,
        /// <summary>
        /// From
        /// </summary>
        From,
        /// <summary>
        /// 加载方式
        /// </summary>
        Async,
        /// <summary>
        /// 引用计数
        /// </summary>
        ReferenceCount,
        /// <summary>
        /// 物理大小
        /// </summary>
        Size,
        /// <summary>
        /// 运存大小
        /// </summary>
        MemorySize,
        /// <summary>
        /// 耗时
        /// </summary>
        CostTime,
        /// <summary>
        /// 加载时间
        /// </summary>
        LoadTime
    }
    
    /// <summary>
    /// 接口 : 加载监视窗体
    /// </summary>
    /// <typeparam name="TWin">窗体类型</typeparam>
    /// <typeparam name="TTree">窗体树形数据类型</typeparam>
    /// <typeparam name="TBranch">树枝类型</typeparam>
    public interface ILoadWatchWindow<TWin, out TTree, TBranch> : IMultiColsWindow<TWin, WindowConf, TTree>
        where TWin : WindowBase, IMultiColsWindow<TWin, WindowConf, TTree>
        where TTree : ListJsonData<TTree, TBranch>, ILoadTree<TTree, TBranch>
        where TBranch : LoadBranch, IEquatable<TBranch>
    {

    }
}
